package com.test.criteria;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.hibernate.criterion.Restrictions;

import com.pojo.Category;
import com.pojo.Product;

/**
 * @description 使用hibernate进行分页，无论是MySQL还是Oracle\NOSQL\DB2分页查询都是一样的
 * @author Leon Plious
 * @date 2020年7月6日
 */
public class HibernateTestCriteria {
	
	public static void main(String[] args) {
		
		SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
		Session session = sessionFactory.openSession();
		session.beginTransaction();
		
		// 对product 进行分页查询
		Criteria criteria = session.createCriteria(Product.class);
		// 查询条件
		String name = "phone";
		criteria.add(Restrictions.like("name", "%"+name+"%"));
		// 从数据库第三条数据开始查
		criteria.setFirstResult(2);
		// 表示一共查五条数据
		criteria.setMaxResults(5);
/*
 * 
navicat数据库数据显示
1	iphone7	5000	
2	phone0	5000	
3	phone1	5001	
4	phone2	5002	1
5	phone-modified	5003	
7	phone5	5005	
8	phone6	5006	
9	phone7	5007	
10	phone8	5008	
11	phone9	5009	
12	级联更新3	0	1
13	级联更新2	0	1
14	级联更新1	0	1

输出结果
phone1
phone2
phone-modified
phone5
phone6		
 */
		@SuppressWarnings("unchecked")
		List<Product> ps = criteria.list();
		for(Product p : ps) {
			System.out.println(p.getName());
		}
		
		session.getTransaction().commit();
		session.close();
		sessionFactory.close();
	}
}
